package interfaz;

import gestores.GestorCompetencia;

import javax.swing.JPanel;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridBagLayout;
import java.awt.Toolkit;

import javax.swing.JLabel;
import java.awt.GridBagConstraints;
import java.awt.Insets;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.JButton;

import componentes.Competencia;
import componentes.Participante;
import dao.DAO_Competencia;


import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.io.File;

public class AltaParticipante extends JPanel {
	private JTextField txtParticipante;
	private JTextField txtCorreo;
	private JTextField txtImagen;
	private JButton btnAceptar;
	private JButton btnCancelar;
	private JLabel lblAltaParticipante;
	private JLabel lblParticipanteOEquipo;
	private JLabel lblCorreoElectronico;
	private JLabel lblImagen;
	private	JButton btnExaminar;

	
	private Participante participante;
	private JLabel lblErrorParticipante;
	private JLabel lblErrorCorreo;
	

	/**
	 * Create the panel.
	 * @param pantallaInicialUserReg 
	 * @param panelPrincipal 
	 */
	public AltaParticipante(JPanel panelAnterior, Competencia competencia, PantallaInicialUserReg pantallaInicialUserReg) {
		setBackground(new Color(236, 141, 4));
		GridBagLayout gridBagLayout = new GridBagLayout();
		gridBagLayout.columnWidths = new int[]{0, 120, 120, 0};
		gridBagLayout.rowHeights = new int[]{0, 0, 0, 0, 0, 0, 0, 0};
		gridBagLayout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0};
		gridBagLayout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
		setLayout(gridBagLayout);
		
		lblAltaParticipante = new JLabel("Alta Participante");
		lblParticipanteOEquipo = new JLabel("Participante o Equipo");
		txtParticipante = new JTextField();
		lblCorreoElectronico = new JLabel("Correo Electronico");
		txtCorreo = new JTextField();
		lblImagen = new JLabel("Imagen");
		txtImagen = new JTextField();
		btnExaminar = new JButton("Examinar");
		btnAceptar = new JButton("Aceptar");
		btnCancelar = new JButton("Cancelar");
		lblErrorParticipante = new JLabel("Debe ingresar un nombre de participante");
		lblErrorCorreo = new JLabel("Debe ingresar un correo electronico valido");
		
	    inicializar(pantallaInicialUserReg, panelAnterior, competencia);
	} //fin constructor
	
	
	private void inicializar(final PantallaInicialUserReg pantallaInicialUserReg, final JPanel panelAnterior, final Competencia competencia){
	
		lblAltaParticipante.setFont(new Font("Tahoma", Font.BOLD, 11));
		GridBagConstraints gbc_lblAltaParticipante = new GridBagConstraints();
		gbc_lblAltaParticipante.weighty = 1.0;
		gbc_lblAltaParticipante.weightx = 1.0;
		gbc_lblAltaParticipante.gridwidth = 4;
		gbc_lblAltaParticipante.insets = new Insets(5, 0, 5, 0);
		gbc_lblAltaParticipante.gridx = 0;
		gbc_lblAltaParticipante.gridy = 0;
		add(lblAltaParticipante, gbc_lblAltaParticipante);
		
		GridBagConstraints gbc_lblParticipanteOEquipo = new GridBagConstraints();
		gbc_lblParticipanteOEquipo.weightx = 1.0;
		gbc_lblParticipanteOEquipo.anchor = GridBagConstraints.SOUTHEAST;
		gbc_lblParticipanteOEquipo.ipadx = 1;
		gbc_lblParticipanteOEquipo.ipady = 1;
		gbc_lblParticipanteOEquipo.insets = new Insets(0, 0, 5, 5);
		gbc_lblParticipanteOEquipo.gridx = 0;
		gbc_lblParticipanteOEquipo.gridy = 1;
		add(lblParticipanteOEquipo, gbc_lblParticipanteOEquipo);
		
		GridBagConstraints gbc_txtParticipante = new GridBagConstraints();
		gbc_txtParticipante.fill = GridBagConstraints.HORIZONTAL;
		gbc_txtParticipante.gridwidth = 2;
		gbc_txtParticipante.anchor = GridBagConstraints.SOUTH;
		gbc_txtParticipante.weighty = 1.0;
		gbc_txtParticipante.insets = new Insets(0, 0, 5, 5);
		gbc_txtParticipante.gridx = 1;
		gbc_txtParticipante.gridy = 1;
		add(txtParticipante, gbc_txtParticipante);
		txtParticipante.setColumns(10);
		
	
		lblErrorParticipante.setForeground(new Color(236, 141, 4));
		GridBagConstraints gbc_lblErrorParticipante = new GridBagConstraints();
		gbc_lblErrorParticipante.gridwidth = 2;
		gbc_lblErrorParticipante.anchor = GridBagConstraints.NORTH;
		gbc_lblErrorParticipante.weighty = 1.0;
		gbc_lblErrorParticipante.insets = new Insets(0, 0, 5, 5);
		gbc_lblErrorParticipante.gridx = 1;
		gbc_lblErrorParticipante.gridy = 2;
		add(lblErrorParticipante, gbc_lblErrorParticipante);
		
		GridBagConstraints gbc_lblCorreoElectronico = new GridBagConstraints();
		gbc_lblCorreoElectronico.weighty = 1.0;
		gbc_lblCorreoElectronico.weightx = 1.0;
		gbc_lblCorreoElectronico.anchor = GridBagConstraints.SOUTHEAST;
		gbc_lblCorreoElectronico.insets = new Insets(0, 0, 5, 5);
		gbc_lblCorreoElectronico.gridx = 0;
		gbc_lblCorreoElectronico.gridy = 3;
		add(lblCorreoElectronico, gbc_lblCorreoElectronico);
		
		GridBagConstraints gbc_textCorreo = new GridBagConstraints();
		gbc_textCorreo.fill = GridBagConstraints.HORIZONTAL;
		gbc_textCorreo.gridwidth = 2;
		gbc_textCorreo.weighty = 1.0;
		gbc_textCorreo.anchor = GridBagConstraints.SOUTH;
		gbc_textCorreo.insets = new Insets(0, 0, 5, 5);
		gbc_textCorreo.gridx = 1;
		gbc_textCorreo.gridy = 3;
		add(txtCorreo, gbc_textCorreo);
		txtCorreo.setColumns(10);
		
	
		lblErrorCorreo.setForeground(new Color(236, 141, 4));
		GridBagConstraints gbc_lblErrorCorreo = new GridBagConstraints();
		gbc_lblErrorCorreo.gridwidth = 2;
		gbc_lblErrorCorreo.anchor = GridBagConstraints.NORTH;
		gbc_lblErrorCorreo.weighty = 1.0;
		gbc_lblErrorCorreo.insets = new Insets(0, 0, 5, 5);
		gbc_lblErrorCorreo.gridx = 1;
		gbc_lblErrorCorreo.gridy = 4;
		add(lblErrorCorreo, gbc_lblErrorCorreo);
		
		GridBagConstraints gbc_lblImagen = new GridBagConstraints();
		gbc_lblImagen.weighty = 1.0;
		gbc_lblImagen.weightx = 1.0;
		gbc_lblImagen.anchor = GridBagConstraints.EAST;
		gbc_lblImagen.insets = new Insets(0, 0, 5, 5);
		gbc_lblImagen.gridx = 0;
		gbc_lblImagen.gridy = 5;
		add(lblImagen, gbc_lblImagen);
				
		GridBagConstraints gbc_textImagen = new GridBagConstraints();
		gbc_textImagen.fill = GridBagConstraints.HORIZONTAL;
		gbc_textImagen.gridwidth = 2;
		gbc_textImagen.weighty = 1.0;
		gbc_textImagen.insets = new Insets(0, 0, 5, 5);
		gbc_textImagen.gridx = 1;
		gbc_textImagen.gridy = 5;
		add(txtImagen, gbc_textImagen);
		txtImagen.setColumns(10);
		
		GridBagConstraints gbc_btnExaminar = new GridBagConstraints();
		gbc_btnExaminar.weighty = 1.0;
		gbc_btnExaminar.weightx = 1.0;
		gbc_btnExaminar.anchor = GridBagConstraints.WEST;
		gbc_btnExaminar.insets = new Insets(0, 0, 5, 0);
		gbc_btnExaminar.gridx = 3;
		gbc_btnExaminar.gridy = 5;
		add(btnExaminar, gbc_btnExaminar);
		
		GridBagConstraints gbc_btnAceptar = new GridBagConstraints();
		gbc_btnAceptar.gridwidth = 2;
		gbc_btnAceptar.weighty = 1.0;
		gbc_btnAceptar.insets = new Insets(0, 0, 0, 5);
		gbc_btnAceptar.gridx = 0;
		gbc_btnAceptar.gridy = 6;
		add(btnAceptar, gbc_btnAceptar);
		
		GridBagConstraints gbc_btnCancelar = new GridBagConstraints();
		gbc_btnCancelar.gridwidth = 2;
		gbc_btnCancelar.weighty = 1.0;
		gbc_btnCancelar.insets = new Insets(0, 0, 0, 5);
		gbc_btnCancelar.gridx = 2;
		gbc_btnCancelar.gridy = 6;
		add(btnCancelar, gbc_btnCancelar);
		
 //listener
		btnAceptar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
			
			
			participante = new Participante(txtParticipante.getText(), txtCorreo.getText(), txtImagen.getText());
			
			//No se verifica en la BD, porque estoy trabajando con la instancia de competencia que en todo momento 
			//es igual a la que esta en la BD
		
			
			if(competencia.getEstado().equals("Creada") || competencia.getEstado().equals("Planificada")){
				
				if(txtParticipante.getText().length()!= 0  &&  txtCorreo.getText().length()!= 0){
					
					//Se verifica si el correo electronico no esta ya cargado para algun participante
					if(!GestorCompetencia.getInstance().verificarExistenciaCorreo(competencia,txtCorreo.getText() )){

							//Se verifica si el nombre del participante ya existe en esa competencia
							if(!GestorCompetencia.getInstance().verificarExistenciaNombre(competencia, txtParticipante.getText())){
								// todo OK
								GestorCompetencia.getInstance().addParticipante(competencia, participante);	
								JOptionPane.showMessageDialog(null, "La operacion ha culminado con exito", "Informacion", JOptionPane.INFORMATION_MESSAGE);
								
								//Limpia la pantalla de errores
								lblErrorCorreo.setVisible(false);
								lblErrorParticipante.setVisible(false);
								
								
								if(competencia.getEstado().equals("Planificada")){
									//JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
								GestorCompetencia.getInstance().eliminarFixture(competencia);
								competencia.setEstado("Creada");
								GestorCompetencia.getInstance().actualizarEstado(competencia);
								}
								
								
								//Vuelve al panel anterior
								JPanel listarParticipantes = new ListarParticipantes(competencia,panelAnterior, pantallaInicialUserReg);
								listarParticipantes.setVisible(true);
								setVisible(false);
								pantallaInicialUserReg.add(listarParticipantes,BorderLayout.CENTER);
							}
							else{ //Ya hay un participante con ese nombre en la competencia 
								//Suave alerta auditiva
								Toolkit.getDefaultToolkit().beep();
								//Cartel pop up
								JOptionPane.showMessageDialog(null, "Ya hay un participante con el nombre ingresado", "Error", JOptionPane.ERROR_MESSAGE);
								//Seteo de errores y limpieza de campos
								txtParticipante.setText("");
								txtCorreo.setText("");
							}
					}
					else{  //el correo electronico ya fue usado para algun participante de la competencia
						//Suave alerta auditiva
						Toolkit.getDefaultToolkit().beep();
						//Cartel pop up
						JOptionPane.showMessageDialog(null, "Ya hay un participante con el correo electronico ingresado", "Error", JOptionPane.ERROR_MESSAGE);
						//Seteo de errores y limpieza de campos
						txtCorreo.setText("");
						txtParticipante.setText("");
						lblErrorCorreo.setVisible(false);
						lblErrorParticipante.setVisible(false);
					}
								
				}
				else{  //No se ingresaron todos los datos
					//Suave alerta auditiva
					Toolkit.getDefaultToolkit().beep();
					
					//Seteo de errores y limpieza de campos
					lblErrorCorreo.setVisible(true);
					lblErrorParticipante.setVisible(true);
					lblErrorParticipante.setForeground(Color.red);
					lblErrorCorreo.setForeground(Color.red);
					txtCorreo.setText("");
					txtParticipante.setText("");
					
				}
			}

			else{ //La competancia no esta en estado creada o planificada
				JOptionPane.showMessageDialog(null, "No se pueden agregar Participantes a la compentencia ya que la misma ya esta" + competencia.getEstado(), "Error", JOptionPane.ERROR_MESSAGE);
				setVisible(false);
				panelAnterior.setVisible(true);
				}
			}
			});
		
		btnCancelar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setVisible(false);
				panelAnterior.setVisible(true);
			}
		});
		
	// Jframe que agrega una imagen
		btnExaminar.addActionListener(new ActionListener() {
		      public void actionPerformed(ActionEvent ae) {
		    	  	txtImagen.setText("");
			        JFileChooser fileChooser = new JFileChooser();
			        int returnValue = fileChooser.showOpenDialog(null); //mostramos la ventana
			        
			        if (returnValue == JFileChooser.APPROVE_OPTION) {
			          File selectedFile = fileChooser.getSelectedFile();//obtenemos el archivo seleccionado
			          //selectedFile.getName() devuelve el nombre del archivo seleccionado
			          txtImagen.setText("");        
			          String a = selectedFile.toString();
			          if(validarFormato(a)){
			        	  txtImagen.setText(a);
			          	}
			        
			        }
			      }
			    });
	}

	private boolean validarFormato(String ruta){
		
		String extencion= ruta.substring(ruta.length()-4);
		extencion=extencion.toLowerCase();
		if(extencion.equals(".png") || extencion.equals(".jpg"))
			return true;
		
		return false;
	}
}
